﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using CancioneroCONFAD.DAL;
using CancioneroCONFAD.Utilidades;
using SubSonic.Repository;

namespace CancioneroCONFAD.Formularios
{
    public partial class EditarCancion : Form
    {
        SimpleRepository _repository= new SimpleRepository("Cancionero",SimpleRepositoryOptions.None);
        Cancion _cancionEditar=new Cancion();
        public EditarCancion(int idCancion)
        {
            _cancionEditar = _repository.Single<Cancion>(idCancion);

            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            try
            {

                if (CamposValidos())
                {

                    _cancionEditar.Artista = txtArtista.Text;
                    _cancionEditar.TipoCancion = ObtenerTipoAlabanza(cbTipoAlabanza.SelectedItem.ToString());
                    _cancionEditar.Titulo = txtTitulo.Text;

                    _repository.Update(_cancionEditar);
                    _repository.DeleteMany(_cancionEditar.Fragmentos);
                    foreach (var letra in RetornarCuerpos())
                    {
                        var fragmentoCancion = new FragmentoCancion()
                        {
                            IdCancion = _cancionEditar.Id,
                            Letra = letra
                        };
                        _repository.Add(fragmentoCancion);
                    }
                    MessageBox.Show("La alabanza " + _cancionEditar.Titulo + " ha sido actualizada exitosamente.");
                    
                    Close();


                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error:\n" + ex.Message, "Oops lo sentimos", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
            }


        }

        private List<string> RetornarCuerpos()
        {
            var listaLetrasCanciones = new List<string>();
            if (!string.IsNullOrEmpty(rtCuerpo1.Text))
            {
                listaLetrasCanciones.Add(rtCuerpo1.Text);
            }

            if (!string.IsNullOrEmpty(rtCuerpo2.Text))
            {
                listaLetrasCanciones.Add(rtCuerpo2.Text);
            }

            if (!string.IsNullOrEmpty(rtCuerpo3.Text))
            {
                listaLetrasCanciones.Add(rtCuerpo3.Text);
            }

            if (!string.IsNullOrEmpty(rtCuerpo4.Text))
            {
                listaLetrasCanciones.Add(rtCuerpo4.Text);
            }
            return listaLetrasCanciones;
        }

        private bool CamposValidos()
        {
            var camposValidos = true;
            var listaErrores = "";
            if(string.IsNullOrEmpty(txtTitulo.Text))
            {
                camposValidos = false;
                listaErrores += "\nDebe colocar un titulo.";
            }
            if (string.IsNullOrEmpty(rtCuerpo1.Text) && string.IsNullOrEmpty(rtCuerpo2.Text) && string.IsNullOrEmpty(rtCuerpo3.Text) && string.IsNullOrEmpty(rtCuerpo4.Text))
            {
                camposValidos = false;
                listaErrores += "\nDebe colocar letra de la canción.";
            }

            if(cbTipoAlabanza.SelectedItem==null)
            {
                camposValidos = false;
                listaErrores += "\nDebe seleccionar el tipo de la alabanza.";
            }
            if(!camposValidos)
                MessageBox.Show("Favor verifique lo siguiente:" + listaErrores, "Revisar campos", MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
            return camposValidos;
        }

        private static TipoAlabanza ObtenerTipoAlabanza(string valor)
        {
            switch (valor)
            {
                case "Adoración":
                    return TipoAlabanza.Adoracion;
                case "Moderada":
                    return TipoAlabanza.Moderada;
                default:
                    return TipoAlabanza.Jubilo;

            }
        }

        private static string ObtenerTipoAlabanza(TipoAlabanza valor)
        {
            switch (valor)
            {
                case TipoAlabanza.Adoracion:
                    return "Adoración";
                case TipoAlabanza.Moderada:
                    return "Moderada";
                default:
                    return "Júbilo";

            }
        }

        private void EditarCancion_Load(object sender, EventArgs e)
        {
            txtTitulo.Text = _cancionEditar.Titulo;
            txtArtista.Text = _cancionEditar.Artista;
            var letras = _cancionEditar.Fragmentos;
            for(var i=0;i<letras.Count;i++)
            {
                switch (i)
                {
                    case 0:
                        rtCuerpo1.Text = letras[i].Letra;
                        break;
                    case 1:
                        rtCuerpo2.Text = letras[i].Letra;
                        break;
                    case 2:
                        rtCuerpo3.Text = letras[i].Letra;
                        break;
                    case 3:
                        rtCuerpo4.Text = letras[i].Letra;
                        break;
                }
            }
            cbTipoAlabanza.Items.Clear();
            cbTipoAlabanza.Items.Add("Adoración");
            cbTipoAlabanza.Items.Add("Moderada");
            cbTipoAlabanza.Items.Add("Júbilo");
            cbTipoAlabanza.SelectedItem = ObtenerTipoAlabanza(_cancionEditar.TipoCancion);
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}